package com.telecom.tree;

import   java.awt.*;   

import   javax.swing.*;   
  
/*   
  *   CustomComboBoxDemo.java   is   a   1.4   application   that   uses   the   following   files:   
  *       images/Bird.gif   
  *       images/Cat.gif   
  *       images/Dog.gif   
  *       images/Rabbit.gif   
  *       images/Pig.gif   
  */   
public   class   CustomComboBoxDemo   extends   JPanel   {   
        ImageIcon[]   images;   
        String[]   petStrings   =   {"Bird",   "Cat",   "Dog",   "Rabbit",   "Pig"};   
  
        /*   
          *   Despite   its   use   of   EmptyBorder,   this   panel   makes   a   fine   content   
          *   pane   because   the   empty   border   just   increases   the   panel's   size   
          *   and   is   "painted"   on   top   of   the   panel's   normal   background.     In   
          *   other   words,   the   JPanel   fills   its   entire   background   if   it's   
          *   opaque   (which   it   is   by   default);   adding   a   border   doesn't   change   
          *   that.   
          */   
        public   CustomComboBoxDemo()   {   
                super(new   BorderLayout());   
  
                //Load   the   pet   images   and   create   an   array   of   indexes.   
                images   =   new   ImageIcon[petStrings.length];   
                Integer[]   intArray   =   new   Integer[petStrings.length];   
                for   (int   i   =   0;   i   <   petStrings.length;   i++)   {   
                        intArray[i]   =   new   Integer(i);   
                        images[i]   =   createImageIcon("images/"   +   petStrings[i]   +   ".gif");   
                        if   (images[i]   !=   null)   {   
                                images[i].setDescription(petStrings[i]);   
                        }   
                }   
  
                //Create   the   combo   box.   
                JComboBox   petList   =   new   JComboBox(intArray);   
                ComboBoxRenderer   renderer=   new   ComboBoxRenderer();   
                renderer.setPreferredSize(new   Dimension(200,   130));   
                petList.setRenderer(renderer);   
                petList.setMaximumRowCount(3);   
  
                //Lay   out   the   demo.   
                add(petList,   BorderLayout.PAGE_START);   
                setBorder(BorderFactory.createEmptyBorder(20,20,20,20));   
        }   
  
        /**   Returns   an   ImageIcon,   or   null   if   the   path   was   invalid.   */   
        protected   static   ImageIcon   createImageIcon(String   path)   {   
                java.net.URL   imgURL   =   CustomComboBoxDemo.class.getResource(path);   
                if   (imgURL   !=   null)   {   
                        return   new   ImageIcon(imgURL);   
                }   else   {   
                        System.err.println("Couldn't   find   file:   "   +   path);   
                                return   null;   
                }   
        }   
  
        public   static   void   main(String   s[])   {   
                //Make   sure   we   have   nice   window   decorations.   
                JFrame.setDefaultLookAndFeelDecorated(true);   
  
                //Create   and   set   up   the   window.   
                JFrame   frame   =   new   JFrame("CustomComboBoxDemo");   
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
  
                //Create   and   set   up   the   content   pane.   
                JComponent   newContentPane   =   new   CustomComboBoxDemo();   
                newContentPane.setOpaque(true);   
                frame.setContentPane(newContentPane);   
  
                //Display   the   window.   
                frame.pack();   
                frame.setVisible(true);   
        }   
  
        class   ComboBoxRenderer   extends   JLabel   
                                                      implements   ListCellRenderer   {   
                private   Font   uhOhFont;   
  
                public   ComboBoxRenderer()   {   
                        setOpaque(true);   
                        setHorizontalAlignment(CENTER);   
                        setVerticalAlignment(CENTER);   
                }   
  
                /*   
                  *   This   method   finds   the   image   and   text   corresponding   
                  *   to   the   selected   value   and   returns   the   label,   set   up   
                  *   to   display   the   text   and   image.   
                  */   
                public   Component   getListCellRendererComponent(   
                                                                                      JList   list,   
                                                                                      Object   value,   
                                                                                      int   index,   
                                                                                      boolean   isSelected,   
                                                                                      boolean   cellHasFocus)   {   
                        //Get   the   selected   index.   (The   index   param   isn't   
                        //always   valid,   so   just   use   the   value.)   
                        int   selectedIndex   =   ((Integer)value).intValue();   
  
                        if   (isSelected)   {   
                                setBackground(list.getSelectionBackground());   
                                setForeground(list.getSelectionForeground());   
                        }   else   {   
                                setBackground(list.getBackground());   
                                setForeground(list.getForeground());   
                        }   
  
                        //Set   the   icon   and   text.     If   icon   was   null,   say   so.   
                        ImageIcon   icon   =   images[selectedIndex];   
                        String   pet   =   petStrings[selectedIndex];   
                        setIcon(icon);   
                        if   (icon   !=   null)   {   
                                setText(pet);   
                                setFont(list.getFont());   
                        }   else   {   
                                setUhOhText(pet   +   "   (no   image   available)",   
                                                        list.getFont());   
                        }   
  
                        return   this;   
                }   
  
                //Set   the   font   and   text   when   no   image   was   found.   
                protected   void   setUhOhText(String   uhOhText,   Font   normalFont)   {   
                        if   (uhOhFont   ==   null)   {   //lazily   create   this   font   
                                uhOhFont   =   normalFont.deriveFont(Font.ITALIC);   
                        }   
                        setFont(uhOhFont);   
                        setText(uhOhText);   
                }   
        }   
}   
